/**
 * Generali Solutions d'assurances - Tous droits réservés &copy; 2007 - 2010
 */
package fr.generali.accueilclient.produit.param.impl;

import fr.generali.accueilclient.produit.param.ITableProduit;

/**
 * @author Holmes Kelly
 */
public class TableProduit implements ITableProduit {

    /**
     * code
     */
    private String code;

    /**
     * nom commercial
     */
    private String nomCommercial;

    /**
     * code compagnie
     */
    private String codeCompagnie;

    /**
     * code system origine
     */
    private String codeSystemeOrigine;

    /**
     * {@inheritDoc}
     */
    public String getCode() {
        return code;
    }

    /**
     * {@inheritDoc}
     */
    public void setCode(String code) {
        this.code = code;
    }

    /**
     * {@inheritDoc}
     */
    public String getNomCommercial() {
        return nomCommercial;
    }

    /**
     * {@inheritDoc}
     */
    public void setNomCommercial(String nomCommercial) {
        this.nomCommercial = nomCommercial;
    }

    /**
     * {@inheritDoc}
     */
    public String getCodeCompagnie() {
        return codeCompagnie;
    }

    /**
     * {@inheritDoc}
     */
    public void setCodeCompagnie(String codeCompagnie) {
        this.codeCompagnie = codeCompagnie;
    }

    /**
     * {@inheritDoc}
     */
    public String getCodeSystemeOrigine() {
        return codeSystemeOrigine;
    }

    /**
     * {@inheritDoc}
     */
    public void setCodeSystemeOrigine(String codeSystemeOrigine) {
        this.codeSystemeOrigine = codeSystemeOrigine;
    }

    /**
     * {@inheritDoc}
     */
    @Override
    public boolean equals(Object obj) {

        boolean isEqual = false;

        if (this == obj) {

            return true;
        }

        if (obj != null && obj.getClass().getName().equals(this.getClass().getName())) {
            final TableProduit tableProduitCompare = (TableProduit ) obj;

            boolean isTableProduitNonNull =
                            this.getCodeCompagnie() != null && this.getCodeSystemeOrigine() != null
                                            && this.getNomCommercial() != null;

            boolean isTableProduitCompareNonNull =
                            tableProduitCompare.getCodeCompagnie() != null
                                            && tableProduitCompare.getCodeSystemeOrigine() != null
                                            && tableProduitCompare.getNomCommercial() != null;

            boolean isTableProduitNull =
                            this.getCodeCompagnie() == null && this.getCodeSystemeOrigine() == null
                                            && this.getNomCommercial() == null;

            boolean isTableProduitCompareNull =
                            tableProduitCompare.getCodeCompagnie() == null
                                            && tableProduitCompare.getCodeSystemeOrigine() == null
                                            && tableProduitCompare.getNomCommercial() == null;

            if (isTableProduitNonNull && isTableProduitCompareNonNull) {

                isEqual = this.getCodeCompagnie().equals(tableProduitCompare.getCodeCompagnie());
                isEqual = isEqual && this.getCodeSystemeOrigine().equals(tableProduitCompare.getCodeSystemeOrigine());
                isEqual = isEqual && this.getNomCommercial().equals(tableProduitCompare.getNomCommercial());
            }

            if (isTableProduitNull && isTableProduitCompareNull) {

                isEqual = super.equals(obj);
            }

        }

        return isEqual;
    }

    /**
     * {@inheritDoc}
     */
    @Override
    public int hashCode() {
        int hashCode = 0;

        int multiplier = 33;

        boolean isTableProduitNonNull =
                        this.getCodeCompagnie() != null && this.getCodeSystemeOrigine() != null
                                        && this.getNomCommercial() != null;

        boolean isTableProduitNull =
                        this.getCodeCompagnie() == null && this.getCodeSystemeOrigine() == null
                                        && this.getNomCommercial() == null;

        if (isTableProduitNonNull) {
            hashCode = multiplier * hashCode + this.getCodeCompagnie().hashCode();
            hashCode = multiplier * hashCode + this.getCodeSystemeOrigine().hashCode();
            hashCode = multiplier * hashCode + this.getNomCommercial().hashCode();
        }
        if (isTableProduitNull) {
            return super.hashCode();
        }

        return hashCode;
    }

}
